package com.sm.dao;

import java.util.List;

import com.github.pagehelper.Page;
import com.sm.model.User;
import com.sm.vo.UserTeamApplyVO;
import com.sm.vo.UserTeamVO;
import org.apache.ibatis.annotations.Param;

public interface UserMapper {
	int deleteByPrimaryKey(Integer userId);

	int insert(User record);

	int insertSelective(User record);

	User selectByPrimaryKey(Integer userId);

	int updateByPrimaryKeySelective(User record);

	int updateByPrimaryKey(User record);

	User selectAvatarAndNickName(Integer userId);

	/**
	 * 通过推荐人id查询我的直接推荐人
	 *
	 * @param refereesUserId 推荐人id
	 * @param beginTime
	 * @param endTime
	 * @return
	 */
	List<User> selectRefereesUserSum(@Param("refereesUserId") Integer refereesUserId, @Param("beginTime") String beginTime, @Param("endTime") String endTime);

    List<User> selectRefereesUserSumWithSearch(@Param("refereesUserId") String refereesUserId,@Param("search")String search);
	/**
	 * 通过用户id查询直接推荐人。
	 *
	 * @param refereesUserId 要查询的用户。（推荐人id）
	 * @param teamPkBeginTime
	 * @param teamPkEndTime
	 * @return
	 */
	int selectRefereesUserNumber(@Param("refereesUserId") Integer refereesUserId, @Param("teamPkBeginTime") String teamPkBeginTime, @Param("teamPkEndTime") String teamPkEndTime);
    List<User> selectRefereesIdList(@Param("refereesUserId")Integer refereesUserId);
	/**
	 * 通过用户id查询推荐的vip用户数量
	 *
	 * @param refereesUserId 用户id（推荐人id）
	 * @return
	 */
	int selectRefereesVipNumber(@Param("refereesUserId") Integer refereesUserId, @Param("role") Integer role);

	/**
	 * 通过用户id查询推荐的掌柜用户数量
	 *
	 * @param refereesUserId 用户id（推荐人id）
	 * @return
	 */
	int selectRefereesManagerNumber(@Param("refereesUserId") Integer refereesUserId, @Param("manager") Integer manager);

	/**
	 * 查询所有用户
	 *
	 * @return
	 */
	List<User> selectAllUser();

	// 通过用户电话查询一个用户。
	User selectByPhone(String phone);

	// 通过用户推荐码查询一个用户。
	User selectByRecommendCode(String recommendCode);

	//添加用户的上级
	int addReferees(@Param("userId")Integer userId,@Param("referees")Integer referees);

	Page<UserTeamVO> selectListByType(@Param("userId") Integer userId, @Param("type") Integer type, @Param("search") String search);

	Page<UserTeamApplyVO> selectByApplyList(@Param("userId") Integer userId, @Param("type") Integer type, @Param("search") String search);

	List<User> selectSevenNoBindUserList();

	User selectByCode(String recommendCode);

	User selectByToken(String token);
}
